UE.plugin.register("copy", function () {
    var me = this;

    function initZeroClipboard() {
        ZeroClipboard.config({
            debug: false,
            swfPath:
                me.options.UEDITOR_HOME_URL +
                "third-party/zeroclipboard/ZeroClipboard.swf"
        });

        var client = (me.zeroclipboard = new ZeroClipboard());

        // 复制内容
        client.on("copy", function (e) {
            var client = e.client,
                rng = me.selection.getRange(),
                div = document.createElement("div");

            div.appendChild(rng.cloneContents());
            client.setText(div.innerText || div.textContent);
            client.setHtml(div.innerHTML);
            rng.select();
        });
        // hover事件传递到target
        client.on("mouseover mouseout", function (e) {
            var target = e.target;
            if (target) {
                if (e.type == "mouseover") {
                    domUtils.addClass(target, "edui-state-hover");
                } else if (e.type == "mouseout") {
                    domUtils.removeClasses(target, "edui-state-hover");
                }
            }
        });
        // flash加载不成功
        client.on("wrongflash noflash", function () {
            ZeroClipboard.destroy();
        });

        // 触发事件
        me.fireEvent("zeroclipboardready", client);
    }

    return {
        bindEvents: {
            ready: function () {
                if (!browser.ie) {
                    if (window.ZeroClipboard) {
                        initZeroClipboard();
                    } else {
                        utils.loadFile(
                            document,
                            {
                                src:
                                    me.options.UEDITOR_HOME_URL +
                                    "third-party/zeroclipboard/ZeroClipboard.js",
                                tag: "script",
                                type: "text/javascript",
                                defer: "defer"
                            },
                            function () {
                                initZeroClipboard();
                            }
                        );
                    }
                }
            }
        },
        commands: {
            copy: {
                execCommand: function (cmd) {
                    if (!me.document.execCommand("copy")) {
                        alert(me.getLang("copymsg"));
                    }
                }
            }
        }
    };
});
